﻿CREATE PROCEDURE [dbo].[RepriceWriteoffReasonDelete]
(
	@Original_Id int,
	@Original_MD datetime,
	@MW varchar(50) -- если = PhysicallyDelete то запись удаляется физически. В противном случае поле ToDelete устанавливается в 1
)
AS
DECLARE @strMsg nvarchar(500), @intRet int, @intErrCode int
DECLARE @datMD datetime, @intDepartmentId int, @bitPhysicallyDelete bit

	SET NOCOUNT ON;

SELECT @intRet = Id
FROM [CO].RepriceWriteoffReason WHERE Id = @Original_Id AND MD = @Original_MD
IF (@@rowcount <> 1)
BEGIN
	SELECT @intErrCode = 1, 
	@strMsg = 'Данные изменены после последнего запроса!'
	RAISERROR (@strMsg, 11, 1)
	RETURN @intErrCode
END

IF (@Original_Id = 1) OR (@Original_Id = 4)
BEGIN
	SELECT @intErrCode = 2, 
	@strMsg = 'Нельзя удалять запись с идентефикатором равным 1 или 4!'
	RAISERROR (@strMsg, 11, 1)
	RETURN @intErrCode
END

--проверка существования строк переоценки/списания
IF EXISTS (SELECT TOP 1 ID FROM CD.RepriceWriteoffLines WHERE RepriceWriteoffReasonId = @Original_Id ) 
BEGIN
	SELECT @intErrCode = 3, @strMsg = 'Cуществуют строки переоценки/списания с удаляемой причиной!'
	RAISERROR (@strMsg, 11, @intErrCode)
	RETURN @intErrCode
END

--Проверка возможности физического удаления записи из таблиц справочников
EXEC @intRet = dbo.CheckDictionaryDelete @bitPhysicallyDelete OUTPUT, @intDepartmentId OUTPUT, @MW OUTPUT
IF @intRet <> 0 RETURN @intRet

	SET NOCOUNT OFF;
DELETE FROM [CO].RepriceWriteoffReason WHERE Id = @Original_Id
SET @intErrCode = @@error
IF @intErrCode <> 0 RETURN @intErrCode

RETURN 0